import {defineStore} from 'pinia'
// import {useRoute} from 'vue-router'
// let route = useRoute()

export const mainStore = defineStore('main',{
    state:()=>{
        return{
            userInfo:{},//登录用户信息
            menuList:[],//目录信息
            onlySubDirs:[],//仅子目录信息
            subTabList:[],//页签信息
            homeIsShow:true,//home展示
            otherIsShow:false,//非Home展示
            activePath:"/xfjc/index/home",//当前激活路由
            pgs:[],//班组参数
            dirs:[],//所有目录信息
            userCollect:[], //用户收藏组件信息
            ucStatus:false, //用户收藏组件状态
            linksRoutes:[], //组件（不含目录）
            userSessionInfo:{}, //用户session信息
            needAddAuthDirsMidd:[], //须增加权限
            needDelAuthDirsMidd:[],  //须删除权限
            needUpdateAuthDirsMidd:[], //须更新权限
            oldAuthDirsMidd:[], //旧权限
        }
    },
    persist:{
        enablend:true //开启数据缓存
    },
    actions:{
        //存入登录用户信息
        setUserInfo(data){
            this.userInfo = data
        },
        //清空用户信息
        clearUserInfo(){
            this.userInfo = {}
        },
        //存入目录信息
        setMenuList(data){
            this.menuList = data
        },
        //清空目录信息
        clearMenuList(){
            this.menuList = []
        },
        //存入仅子目录信息
        setOnlySubDirs(data){
            this.onlySubDirs = data.filter(item => item.COMPONENTNAME !== "")          
        },
        //清空仅子目录信息
        clearOnlySubDirs(){
            this.onlySubDirs = []  
        },
        //添加tab页签
        addSubTabList(data){
            if(!this.subTabList.length){
                this.subTabList.push(data)
            }else{
                let stl = this.subTabList
                //判断传入的tab数据是否存在于subTagLst中
                let hasStl = stl.some(item => item.TITLE === data.TITLE)
                if(!hasStl) this.subTabList.push(data)
            }
        },
        //关闭单个Tab页签
        closeSubTab(index){
            this.subTabList.splice(index,1)
        },
        //关闭所有Tab页签
        clearAllSubTabList(){
            this.subTabList = []
        },
        //关闭其他Tab页签
        clearOtherSubTabList(path){
            // console.log(this.subTabList);            
             for(let i = 0;i < this.subTabList.length;i++){
                if(this.subTabList[i].PATH !== path){
                    this.subTabList.splice(i,1)
                    i--
                }
             }
        },
        //home切换
        toggleHomeShow(path){
            if(path === '/xfjc/index/home'){
                this.activePath = path
                this.homeIsShow = true
                this.otherIsShow = false                
            }else{
                this.activePath = path                
                if(!this.otherIsShow) {
                    this.homeIsShow = false
                    this.otherIsShow = true
                }
            } 
        },
        //存入班组信息
        setPgs(data){
            this.pgs = data
        },
        //清除班组信息
        clearPgs(){
            this.pgs = []
        },
        //存入目录信息
        setDirs(data){
            this.dirs = data
        },
        //清空目录信息
        clearDirs(){
            this.dirs = []
        },
        //改变用户收藏组件信息
        setUserCollect(val){
            this.userCollect = val
        },
        //清空用户收藏组件信息
        clearUserCollect(){
            this.userCollect = []
        },
        //设置用户收藏组件状态
        setUcStatus(val){
            this.ucStatus = val
        },
        //设置activePath
        setActivePath(val){
            this.activePath = val
        },
        //设置linkRoutes
        setLinkRoutes(val){
            this.linksRoutes = val
        },
        //清空linkRoutes
        clearLinkRoutes(){
            this.linksRoutes = []
        },
        //存入用户会话信息
        setUserSessionInfo(data){
            this.userSessionInfo = data
        },
        //清空用户会话信息
        clearUserSessionInfo(){
            this.userSessionInfo = {}
        },
        //存入旧权限
        setOldAuthDirsMidd(data){
            this.oldAuthDirsMidd = data
        },
        //清空旧权限
        clearOldAuthDirsMidd(){
            this.oldAuthDirsMidd = []
        },
        //加入须增加权限
        addNeedAddAuthDirsMidd(data){
            // console.log(data)
            let hasAdd = this.needAddAuthDirsMidd.some(v => v.ID === data.ID)
            let hasDel = this.needDelAuthDirsMidd.some(v => v.ID === data.ID)
            //无权限时
            if(data.ADMID === null){
                //须删除、须新增中均不存在相同元素 
                if(!hasAdd && !hasDel) {
                    this.needAddAuthDirsMidd.push(data)
                }
                //须删除有元素、须新增无元素时
                if(!hasAdd && hasDel){
                    let ndIndex = this.needDelAuthDirsMidd.findIndex(v => v.ID === data.ID)
                    this.needDelAuthDirsMidd.splice(ndIndex,1)
                }
            }
            //有权限时
            if(data.ADMID !== null){
                //须删除存在、须新增中不存在相同元素 
                if(!hasAdd && hasDel){
                    let ndIndex = this.needDelAuthDirsMidd.findIndex(v => v.ID === data.ID)
                    this.needDelAuthDirsMidd.splice(ndIndex,1)
                }
                //须删除不存在、须新增中存在相同元素
                if(hasAdd &&!hasDel) {
                    let naIndex = this.needAddAuthDirsMidd.findIndex(v => v.ID === data.ID)
                    this.needAddAuthDirsMidd.splice(naIndex,1)
                }
            }
            
            // console.log(this.needAddAuthDirsMidd)
            // console.log(this.needDelAuthDirsMidd)

            /*
            //须增加及须删除均为空数组时
            if(!this.needDelAuthDirsMidd.length && !this.needAddAuthDirsMidd.length) {
                this.needAddAuthDirsMidd.push(data)
            } 
            //须删除有元素、须增加无元素时
            else if(this.needDelAuthDirsMidd.length && !this.needAddAuthDirsMidd.length){
                //判断须删除中是否存在相同元素
                let hasDel = this.needDelAuthDirsMidd.some(v => v.ID === data.ID)
                //没有则添加入须增加权限,有则删除须删除对应下标的元素
                if(!hasDel){
                    this.needAddAuthDirsMidd.push(data)
                }else{
                    let ndIndex = this.needDelAuthDirsMidd.findIndex(v => v.ID === data.ID)
                    this.needDelAuthDirsMidd.splice(ndIndex,1)
                    // console.log(this.needDelAuthDirsMidd)
                }
            }
            //须增加有元素、须删除无元素时
            else if(this.needAddAuthDirsMidd.length && !this.needDelAuthDirsMidd.length){
                //判断须增加中是否存在相同元素
                let hasAdd = this.needAddAuthDirsMidd.some(v => v.ID === data.ID)
                //没有则添加入须增加权限
                if(!hasAdd) this.needAddAuthDirsMidd.push(data)
            }   
            //须增加有元素、须删除有元素时  
            else if(this.needAddAuthDirsMidd.length && this.needDelAuthDirsMidd.length){
                let naIndex = this.needAddAuthDirsMidd.findIndex(v => v.ID === data.ID)
                let ndIndex = this.needDelAuthDirsMidd.findIndex(v => v.ID === data.ID)
                // console.log(naIndex )
                // console.log(ndIndex)
                if(ndIndex >= 0 && naIndex === -1 ){
                    this.needDelAuthDirsMidd.splice(ndIndex,1) 
                }else if(ndIndex === -1 && naIndex === -1){
                    this.needAddAuthDirsMidd.push(data)
                }
            }
            */
        },
        //加入须删除权限
        addNeedDelAuthDirsMidd(data){
            // console.log(data)
            let hasDel = this.needDelAuthDirsMidd.some(v => v.ID === data.ID)
            let hasAdd = this.needAddAuthDirsMidd.some(v => v.ID === data.ID)
            //有权限时
            if(data.ADMID !== null){    
                //须删除、须新增中均不存在相同元素            
                if(!hasDel && !hasAdd){
                    this.needDelAuthDirsMidd.push(data)
                }
                //须删除不存在、须新增中存在相同元素 
                if(!hasDel && hasAdd){
                    let naIndex = this.needAddAuthDirsMidd.findIndex(v => v.ID === data.ID)
                    this.needAddAuthDirsMidd.splice(naIndex,1)
                }
            }
            //无权限时
            if(data.ADMID === null){
                //须删除不存在、须新增中存在相同元素 
                if(!hasDel && hasAdd){
                    let naIndex = this.needAddAuthDirsMidd.findIndex(v => v.ID === data.ID)
                    this.needAddAuthDirsMidd.splice(naIndex,1)
                }
                //须删除存在、须新增中不存在相同元素 
                if(hasDel && !hasAdd){
                    let ndIndex = this.needDelAuthDirsMidd.findIndex(v => v.ID === data.ID)
                    this.needDelAuthDirsMidd.splice(ndIndex,1)
                }
            }            
            // console.log(this.needAddAuthDirsMidd)
            // console.log(this.needDelAuthDirsMidd)

            /*

            /*
            //须增加及须删除均为空数组时
            if(!this.needDelAuthDirsMidd.length && !this.needAddAuthDirsMidd.length){
                data.IS_ADD = 0
                data.IS_DEL = 0
                data.IS_UPDATE = 0
                this.needDelAuthDirsMidd.push(data)
            }
            //须增加有元素时 须删除无元素
            else if(this.needAddAuthDirsMidd.length && !this.needDelAuthDirsMidd.length){
                //判断须增加中是否存在相同元素
                let hasAdd = this.needAddAuthDirsMidd.some(v => v.ID === data.ID) 
                // console.log(hasAdd)                
                //没有则添加入须删除权限,有则删除须增加对应下标的元素
                if(!hasAdd) {
                    data.IS_ADD = 0
                    data.IS_DEL = 0
                    data.IS_UPDATE = 0
                    this.needDelAuthDirsMidd.push(data)
                }else{
                    data.IS_ADD = 0
                    data.IS_DEL = 0
                    data.IS_UPDATE = 0
                    let naIndex = this.needAddAuthDirsMidd.findIndex(v => v.ID === data.ID)
                    this.needAddAuthDirsMidd.splice(naIndex,1)
                    // console.log(this.needAddAuthDirsMidd)   
                }
            }
            //须删除有元素时 须增加无元素
            else if(this.needDelAuthDirsMidd.length && !this.needAddAuthDirsMidd.length){
                //判断须删除中是否存在相同元素
                let hasDel = this.needDelAuthDirsMidd.some(v => v.ID === data.ID)
                // console.log(hasDel) 
                //没有则添加入须删除权限
                data.IS_ADD = 0
                data.IS_DEL = 0
                data.IS_UPDATE = 0
                if(!hasDel) this.needDelAuthDirsMidd.push(data)
            } 
            //须删除有元素、须添加有元素
            else if(this.needDelAuthDirsMidd.length && this.needAddAuthDirsMidd.length){
                let naIndex = this.needAddAuthDirsMidd.findIndex(v => v.ID === data.ID)
                let ndIndex = this.needDelAuthDirsMidd.findIndex(v => v.ID === data.ID)
                // console.log(naIndex);
                // console.log(ndIndex);
                if(naIndex >= 0 && ndIndex === -1 ){
                    this.needAddAuthDirsMidd.splice(naIndex,1)
                }else if(naIndex === -1 && ndIndex === -1){
                    data.IS_ADD = 0
                    data.IS_DEL = 0
                    data.IS_UPDATE = 0
                    this.needDelAuthDirsMidd.push(data)
                } 
            }
            */
        },
        //加入须更新权限
        addNeedUpdateAuthDirsMidd(data){
            
            //须增加及须删除及须更新均为空数组时
            if(!this.needDelAuthDirsMidd.length && !this.needAddAuthDirsMidd.length && !this.needUpdateAuthDirsMidd.length){
                this.needUpdateAuthDirsMidd.push(data)
            }
            //须删除有元素时 须增加、须更新无元素
            else if(!this.needAddAuthDirsMidd.length && this.needDelAuthDirsMidd.length && !this.needUpdateAuthDirsMidd.length){
                let ndIndex = this.needDelAuthDirsMidd.findIndex(v => v.ID === data.ID)
                //须是删除中不存在相同元素时(存在会因响应式自动更新)
                if(ndIndex === -1) this.needUpdateAuthDirsMidd.push(data)
            }
            //须增加有元素时 须删除、须更新无元素
            else if(this.needAddAuthDirsMidd.length && !this.needDelAuthDirsMidd.length&& !this.needUpdateAuthDirsMidd.length){
                let naIndex = this.needAddAuthDirsMidd.findIndex(v => v.ID === data.ID)
                //须新增中不存在相同元素时(存在会因响应式自动更新)
                if(naIndex === -1) this.needUpdateAuthDirsMidd.push(data)
            }
            //须增加、须删除有元素时、须更新无元素
            else if(this.needAddAuthDirsMidd.length && this.needDelAuthDirsMidd.length && !this.needUpdateAuthDirsMidd.length){
                let naIndex = this.needAddAuthDirsMidd.findIndex(v => v.ID === data.ID)
                let ndIndex = this.needDelAuthDirsMidd.findIndex(v => v.ID === data.ID) 
                //须新增及须删除中均不存在相同元素时
                if(naIndex === -1 && ndIndex === -1) this.needUpdateAuthDirsMidd.push(data)
            }
            //须增加、须删除、、须更新均有元素时
            else if(this.needAddAuthDirsMidd.length && this.needDelAuthDirsMidd.length && this.needUpdateAuthDirsMidd.length){
                let naIndex = this.needAddAuthDirsMidd.findIndex(v => v.ID === data.ID)
                let ndIndex = this.needDelAuthDirsMidd.findIndex(v => v.ID === data.ID) 
                let nuIndex = this.needUpdateAuthDirsMidd.findIndex(v => v.ID === data.ID)
                //须新增、须删除、须更新中均不存在相同元素时
                if(naIndex === -1 && ndIndex === -1 && nuIndex === -1) this.needUpdateAuthDirsMidd.push(data)
                //须新增、须删除中均不存在相同元素、须更新存在相同元素时
                if(naIndex === -1 && ndIndex === -1 && nuIndex >= 0) {
                    //判断是否在旧权限中存在相同的权限明细
                    let oIndex = this.oldAuthDirsMidd.findIndex(v => v.ID === data.ID && v.IS_ADD === data.IS_ADD && v.IS_DEL === data.IS_DEL && v.IS_UPDATE === data.IS_UPDATE)  
                    // console.log(oIndex)
                    if(oIndex >= 0) this.needUpdateAuthDirsMidd.splice(nuIndex,1)                        
                }                       
            }
            //须增加无元素时 须删除、须更新有元素
            else if(!this.needAddAuthDirsMidd.length && this.needDelAuthDirsMidd.length && this.needUpdateAuthDirsMidd.length){
                let ndIndex = this.needDelAuthDirsMidd.findIndex(v => v.ID === data.ID)
                let nuIndex = this.needUpdateAuthDirsMidd.findIndex(v => v.ID === data.ID) 
                //须删除、须更新中均不存在相同元素时
                if(ndIndex === -1 && nuIndex === -1) this.needUpdateAuthDirsMidd.push(data)
                //须删除中不存在相同元素、须更新存在相同元素时
                if(ndIndex === -1 && nuIndex >= 0) {
                    //判断是否在旧权限中存在相同的权限明细
                    let oIndex = this.oldAuthDirsMidd.findIndex(v => v.ID === data.ID && v.IS_ADD === data.IS_ADD && v.IS_DEL === data.IS_DEL && v.IS_UPDATE === data.IS_UPDATE)  
                    // console.log(oIndex)
                    if(oIndex >= 0) this.needUpdateAuthDirsMidd.splice(nuIndex,1)                        
                }  
            }
            //须删除无元素时 须增加、须更新有元素
            else if(this.needAddAuthDirsMidd.length && !this.needDelAuthDirsMidd.length && this.needUpdateAuthDirsMidd.length){
                let naIndex = this.needAddAuthDirsMidd.findIndex(v => v.ID === data.ID)
                let nuIndex = this.needUpdateAuthDirsMidd.findIndex(v => v.ID === data.ID)
                //须新增、须更新中均不存在相同元素时
                if(naIndex === -1 && nuIndex === -1) this.needUpdateAuthDirsMidd.push(data)  
                //须新增中不存在相同元素、须更新存在相同元素时
                if(naIndex === -1 && nuIndex >= 0) {
                    //判断是否在旧权限中存在相同的权限明细
                    let oIndex = this.oldAuthDirsMidd.findIndex(v => v.ID === data.ID && v.IS_ADD === data.IS_ADD && v.IS_DEL === data.IS_DEL && v.IS_UPDATE === data.IS_UPDATE)  
                    // console.log(oIndex)
                    if(oIndex >= 0) this.needUpdateAuthDirsMidd.splice(nuIndex,1)                        
                }  
            }
            //须增加、须删除无元素时 须更新有元素
            else if(!this.needAddAuthDirsMidd.length && !this.needDelAuthDirsMidd.length && this.needUpdateAuthDirsMidd.length){
                let nuIndex = this.needUpdateAuthDirsMidd.findIndex(v => v.ID === data.ID)
                //须更新中不存在相同元素时
                if(nuIndex === -1){
                    this.needUpdateAuthDirsMidd.push(data)
                }else{
                    //判断是否在旧权限中存在相同的权限明细
                    // let oIndex = this.oldAuthDirsMidd.findIndex(v => v.ID === data.ID && v.IS_ADD === data.IS_ADD && v.IS_DEL === data.IS_DEL && v.IS_UPDATE === data.IS_UPDATE)
                    let oIndex = this.oldAuthDirsMidd.findIndex(v => {
                        if(v.ID === data.ID 
                            && v.IS_ADD === data.IS_ADD 
                            && v.IS_DEL === data.IS_DEL 
                            && v.IS_UPDATE === data.IS_UPDATE){
                            return true
                        }else{
                            return false
                        }                           
                    })
                    // console.log(oIndex)
                    if(oIndex >= 0) this.needUpdateAuthDirsMidd.splice(nuIndex,1)
                }
            }
                    
        },
        //清空须增加权限及须删除权限
        clearNeedAddAndNeedDelAuthDirsMidd(){
            this.needAddAuthDirsMidd = []
            this.needDelAuthDirsMidd = []
            this.needUpdateAuthDirsMidd = []
        }
    },
    getters:{
        //获取最新的uesrInfo
        getNewUserInfo(state){
            return state.userInfo
        },
        //获取最新的subTabList
        getSubTabList(state){
            return state.subTabList
        },
        //获取最新的目录信息
        getMenuList(state){
            return state.menuList
        },
        //获取最新的home展示状态
        getHomeIsShow(state){
            return state.homeIsShow
        },
        //获取最新的other展示状态
        getOtherIsShow(state){
            return state.otherIsShow
        },
        //获取最新的班组信息
        getPgs(state){
            return state.pgs
        },
        //获取最新的目录信息
        getDirs(state){
            return state.dirs
        },
        //获取最新的用户组件收藏信息
        getUserCollect(state){
            return state.userCollect
        },
        //获取最新的用户收藏组件状态
        getUcStatus(state){
            return state.ucStatus
        },
        //获取最新的activePath
        getActivePath(state){
            return state.activePath
        },
        //获取最新的linkRoutes   
        getLinkRoutes(state){
            return state.linksRoutes
        },
        //获取最新的用户会话信息
        getUserSessionInfo(state){
            return state.userSessionInfo
        },
        //获取最新的旧权限
        getOldAuthDirsMidd(state){
            return state.oldAuthDirsMidd
        },
        //获取最新的须添加权限
        getNeedAddAuthMidd(state){
            return state.needAddAuthDirsMidd
        },
        //获取最新的须删除权限
        getNeedDelAuthMidd(state){
            return state.needDelAuthDirsMidd
        },
        //获取最新的须更新权限
        getNeedUpdateAuthMidd(state){
            return state.needUpdateAuthDirsMidd
        }
    }
})